Advances in semi-conductor processing and logic design have permitted an increase in the amount of logic that may be present on integrated circuit devices. As a result, computer system configurations have evolved from a single or multiple integrated circuits in a system to multiple cores and multiple logical processors present on individual integrated circuits. A processor or integrated circuit typically comprises a single processor die, where the processor die may include any number of processing resources, such as cores, threads, and/or logical processors.
In processors with multiple threads, the behavior of one thread potentially affects the behavior of another thread on the same processor core due to sharing of resources, such as caches, memory, and power. Often behavior of one thread creates unfairness in the usage of the shared resources and pipelines. In fact, when one thread's performance significantly changes in relation to other threads on the same core, often a large and unpredictable variability in performance from the unbalanced usage of shared resources occurs.
As a result, one thread or core executing a low priority application potentially adversely affects the performance of a core or thread executing a higher priority application. For example, a background application, such as virus scan, may be executing on a first core utilizing enough shared resources to adversely affect the performance of a second core, which is executing a foreground application. Previously, throttling of voltage and frequency has been utilized to save power. However, these efforts typically involve throttling threads or cores without regard to priority of current application, virtual machines, or operating system tasks. In contrast, some efforts have focused on partitioning of resources to provide quality of service to all applications. Yet, partioning without regard to priority or power consumption potentially causes adverse performance and power usage.